#导入蓝图模块
from posixpath import join
import re
from types import resolve_bases
from flask import Blueprint,request
from db import db1 
from flask.json import jsonify
import json  
#实例化
bp_course = Blueprint("course",__name__) 
# #接口
# @bp_course.route('/couponM',methods=['POST',"GET","PUT","DELETE"])
# def couponM():
#     #添加
#     if request.method == "POST":
#         #获取用户输入
#         data = request.data
#         if data:
#             data = json.loads(data)
#         else:
#             data = request.form
#         #构造sql语句
#         sql = "insert into coupon values(0,'%s',%d,'%s','%s')"%(data['name'],int(data['total']),data['stime'],data['etime'])
#         #pymysql
#         db1.insert(sql)
#         #返回结果
#         return 'ok'
#     elif request.method == 'GET':
#         #根据id获取信息
#         id = request.args.get('id')            
#         sql = "select * from coupon where id=%d"%(int(id))
#         res = db1.find(sql)
#         return jsonify({"code":200,'coupon':res})
#     elif  request.method == "PUT":
#         #修改
#         #获取用户输入
#         data = request.data
#         if data:
#             data = json.loads(data)
#         else:
#             data = request.form
#             #构造Sql语句 update表名 set  字段名1=值 where id=1
#             sql = "update coupon set name='%s',total=%d,starttime='%s',endtime='%s' where id=%d"%(data['name'],int(data['total']),data['stime'],data['etime'],int(data['id']))
#             db1.insert(sql)
#             return jsonify({'code':200})
#     elif request.method == 'DELETE':
#         #获取id
#         id = request.args.get('id')
#         sql = "delete from coupon where id=%d"%(int(id))
#         db1.insert(sql)
#         return jsonify({'code':200})
def get_data():
    data = request.data
    if data:
        data = json.loads(data)
    else:
        data = request.form
    return data

# #部门管理
# @bp_course.route('/deptM',methods=['POST','GET'])
# def deptM():
#     if request.method == "POST":
#         data = get_data()
#         #判断名字是否已经存在
#         sql = "select id from dept where name='%s'"%(data['name'])
#         res = db1.find(sql)
#         #存在直接返回
#         if res:
#             return jsonify({"code":10011,'mes':'已经存在'})
#         #不存在添加
#         else:
#             sql = "insert into dept(name) values('%s')"%(data['name'])
#             db1.insert(sql)
#             return jsonify({"code":200})
#     else:
#         sql = "select * from dept"
#         res = db1.findall(sql)                 
#         return jsonify({"code":200,'list':res})
        
# from utils.myfile import myfile
# import os
# #文件上传
# @bp_course.route('/upload',methods=['POST'])
# def upload():
#     #获取文件                                                  
#     file = request.files['file']
#     #选择文件夹
#     #创建文件
#     myfile.file_mkdir(2)
#     #保存文件
#     file.save(os.path.join('../static/upload/2/',file.filename))
#     #保存 /static/upload/1/
#     return 'ok'
# #景点操作接口
# @bp_course.route('/scenicm',methods=['POST','GET'])
# def scenim():
#     if request.method == "POST":
#         #图片上传,vue封装formdata
#         data = request.form
#         #添加景点
#         sql = "insert into scenic(title,price,typeid) values('%s',%.2f,%d)"
#         (data['title'],float(data['price']),int(data['typeid']))
#         db1.insert(sql)
#         #获取新加的id
#         sql1 = "selecr id from scenic where title='%s'"%(data['title'])
#         res = db1.find(sql1)
#         #文件上传，上传成功后图片路径
#         file = request.files['file']
#         myfile.file_mkdir(str(res['id']))
#         file.save(os.path.join('./static/upload/'+str(res['id']),file.filename))
#         #组装数据添加
#         sql3 = "update scenic set pic='%s' where id=%d"%('/static/upload/'+str(res['id'])+"/"+file.filename,int(res['id']))
#         db1.insert(sql3)
#         return jsonify({'code':200})
#     else:
#         sql = 'select * from scenic'
#         res = db1.findall(sql)
#         return jsonify({'code':10010,'list':res})
# #文件上传
# @bp_course.route('/upload',method=['POST'])
# def upload():
#     file = request.files['file']
#     cityid = request.form['cityid']
#     #创建文件夹
#     myfile.file_mkdir(cityid)
#     #图片上传
#     file.save(os.path.join('./static/upload/'+str(cityid),file.filename))
#     return jsonify({'code':200,'url':'/static/upload'+str(cityid)+'/'+file.filename})
# #查询所有景区
# @bp_course.route('/citym')
# def citym():
#     sql = "select id,name from city"
#     res = db1.findall(sql)
#     return jsonify({'code':200,'list':res}) 
# #添加商品接口
# @bp_course.route('/prom',methods=['POST'])
# def prom():
#     data = get_data()
#     sql = "insert into product(title,price,city_id,pic) values('%s',%2.f,%d,'%s')"%(data['title'],float(data['price']),int(data['city_id']),data['pic'])
#     db1.insert(sql)
#     return jsonify({'code':200})
# #获取分类接口
# @bp_course.route('/orderM',methods=['GET','PUT'])
# def orderM():
#     if request.method == "PUT":
#         id = request.args.get('id')
#         sql = "select * from orders where id=%d"%(int(id))
#         res = db1.find(sql)
#         #判断状态原来为1改成2，原来为2改成1
#         status = 2
#         if int(res['status']) == 2:
#             status=1            
        
#         #执行更新操作
#         sql1 = "update orders set status=%d where id=%d"%(status,int(id))
#         db1.insert(sql1)
#         return jsonify({"code":200})
#     else:
#         #当前页
#         page = int(request.args.get('page'))
#         #每页显示多少条
#         page_size = int(request.args.get('page_size'))
#         start = (page-1)*page_size
#         sql = 'select * from orders limit %d,%d'%(start,page_size)  
#         res = db1.findall(sql)
#         #总条数
#         sql1 = "select count(id) from orders"
#         res1 = db1.find(sql1)
#         return jsonify({"code":200,'list':res,'total':res1['count(id)']})
# #获取分类接口
# @bp_course.route('/orderDetailM',methods=['POST'])
# def orderDetailM():
#     data = get_data()
#     sql = "insert into order_detiail(goods_name,count,price,order_id) values('%s',%d,%.2f,%d)"%(data['goods_name'],int(data['count']),float(data['price']),int(data['order_id']))
#     db1.insert(sql)
#     return jsonify({"code":200})


#发红包200-0.01区间接口
@bp_course.route('/sendmoney')
def sendmoney():
    money = request.args.get('money')
    #对数据进行有效性验证
    if not money:
        return jsonify({"code":10010,"mes":'请输入金额'})
    else:
        try:
             #格式验证
             money = float(money)
        except:
            return jsonify({'code':10012,'mes':'格式有误'})
    if money<200 and money>0.01:
        return jsonify({"code":200})
    else:
        return jsonify({"code":10012})


@bp_course.route('/sendmoney',methods=['POST'])
def sendMoney():
    data = get_data()
    sql = "insert into test_record(name,url,method,params,result) values('%s','%s','%s','%s','%s')"%(data['name'],data['url'],data['method'],data['params'],data['result'])
    db1.insert(sql)
    return jsonify({'code':200})




import re
import time,random
#发送验证码
@bp_course.route('/sendSms',methods=['POST'])
def sendSms():
    #获取手机号
    data = get_data()
    print(data)
    try:
         mobile = data['mobile']  
    except:
       return jsonify({"code":10011,'mes':'不能为空'})

    #验证手机号是否合法
    res = re.match('^1[3-9]\d{9}$',mobile)
    print(res)
    if not res:
        return jsonify({"code":10010,'mes':'手机号不合法'})
    #检查上次发送是否超过一分钟，1分钟内不能发
    sql = "select stime from trecord where mobile='%s' order by id desc limit 1"%(str(mobile))
    record = db1.find(sql)
    if record:
        #判断时间是否在一分钟以内
        seconds = int(time.time())-int(record['stime'])
        if seconds<60:
            return jsonify({"code":10012,"mes":'一分钟内不能重复发送'})
    #生成验证码，发送
    code = random.randint(100000,999999)
    #当发送成功写入记录表
    sql2 = "insert into trecord(mobile,code,stime) values('%s',%d,%d)"%(str(mobile),code,int(time.time()))
    db1.insert(sql2)
    return jsonify({"code":200,'mes':'发送成功'})


@bp_course.route('/tlogin',methods=['POST'])
def tlogin():
    #获取手机号验证码
    data = get_data()
    #通过手机号去记录中表查询，查最近的一条
    sql = "select code,stime from trecord where mobile='%s' order by id desc limit 0,1"%(data['mobile'])
    res = db1.find(sql)
    #验证码过期时间验证
    if int(time.time())-int(res['stime'])>60:
        return jsonify({"code":10020,'mes':'验证码已经过期，重新发送'})
    #验证是否相同
   
    if res['code'] == int(data['code']):
        #用户表中查询手机号是否存在
        sql1 = "select id from tuser where mobile='%s'"%(data['mobile'])
        user = db1.find(sql1)
        #存在返回登录成功userid
        if user:
            return jsonify({"code":200,'userid':user['id'],'mes':'登录成功'})
        #不存在添加新用户返回userid
        sql2 = "insert into tuser(mobile) values('%s')"%(data['mobile'])
        db1.insert(sql2)
        sql3 = "select id from tuser where mobile='%s'"%(data['mobile'])
        user3 = db1.find(sql3)
        return jsonify({"code":200,'userid':user3['id']})
    else:
        return jsonify({"code":10021,'mes':'验证码输入错误'})


#搜索接口
@bp_course.route('/search')
def search():
    #获取数据
    title = request.args.get('title')
    #判断是否为空去掉空格
    title = title.strip()
    if not title:
        return jsonify({"code":10030,'mes':'搜索内容不能为空'})
    #判断长度 5-10
    if 1<=len(title)<=10:
        #数据库查询
        sql = "select * from goods where title like '%"+title+"%'"
        print(sql)
        res = db1.findall(sql)
        #写入记录表
        ip = request.remote_addr
        sql2 = "insert into grecord(title,ip) values('%s','%s')"%(title,ip)
        #返回结果
        db1.insert(sql2)
        return jsonify({"code":200,'list':res})
    else:
        return jsonify({"code":10031,'mes':'长度不合法'})


@bp_course.route('/blogin',methods=['POST'])
def blogin():
    #获取用户输入
    data = request.data
    if data:
        data = json.loads(data)
    else:
        data = request.form
    #判断用户名密码是否为空
    try:
        username = data['username']
        password = data['password']
    except:
        return jsonify({"code":10010,'mes':'必须输入用户名和密码'})
    
    if not all([username,password]):
        return jsonify({"code":10010,'mes':'必须输入用户名和密码'})
    #根据用户名去数据库查
    sql = "select * from author where username='%s'"%(username)
    mes = db1.find(sql)
    if mes:
        #查看到比较密码
        if mes['password'] == password:
            #比对成功返回userid username
            return jsonify({"code":200,'mes':'登录成功','userid':mes['id'],'username':mes['username']})
        #失败提示密码错误
        else:
             return jsonify({"code":10012,'mes':'密码错误'})
    else:
        #没查到返回此用户不存在
        return jsonify({"code":10011,'mes':'用户不存在'})